const QQMapWX = require('../../utils/qqmap-wx-jssdk.min.js')
const qqmapsdk = new QQMapWX({ key: '6KRBZ-PSRLH-3KQD5-WMZ2C-5LVWZ-VQBQO' })
const app = getApp()

Component({
  properties: {
    initLatitude: { type: Number, value: 39.90469 },
    initLongitude: { type: Number, value: 116.40717 }
  },

  data: {
    latitude: null,
    longitude: null,
    markers: [],
    searchText: '',
    address: '',
    userLocation: {}, // 包含 latitude, longitude 和 address
    searchResult: [],
    showResult: false,
  },

  lifetimes: {
    attached() {
      this.mapCtx = wx.createMapContext('myMap', this)
      this.initLocation()
    }
  },

  methods: {
    // 初始化定位逻辑
    initLocation() {
      wx.getSetting({
        success: res => {
          if (res.authSetting['scope.userLocation']) {
            this.fetchUserLocation()
          } else {
            wx.authorize({
              scope: 'scope.userLocation',
              success: () => this.fetchUserLocation(),
              fail: () => this.useDefaultLocation()
            })
          }
        },
        fail: () => this.useDefaultLocation()
      })
    },

    // 获取用户位置并解析地址
    fetchUserLocation() {
      wx.getLocation({
        type: 'gcj02',
        success: res => {
          this.handleLocationSuccess(res.latitude, res.longitude)
        },
        fail: () => this.useDefaultLocation()
      })
    },

    // 处理定位成功（用户位置和默认位置共用）
    handleLocationSuccess(latitude, longitude) {
      // 更新地图显示位置
      this.updateMapPosition(latitude, longitude)

      // 解析并存储用户位置信息
      this.reverseGeocoderForUser(latitude, longitude, (address) => {
        this.setData({
          userLocation: {
            latitude,
            longitude,
            address
          }
        })
      })
    },

    // 专门解析用户位置的地址
    reverseGeocoderForUser(latitude, longitude, callback) {
      qqmapsdk.reverseGeocoder({
        location: `${latitude},${longitude}`,
        success: res => {
          const address = res.result.address || res.result.formatted_addresses.recommend
          callback && callback(address)
        }
      })
    },

    // 使用默认位置
    useDefaultLocation() {
      const { initLatitude, initLongitude } = this.properties
      this.handleLocationSuccess(initLatitude, initLongitude)
      wx.showToast({ title: '已使用默认位置', icon: 'none' })
    },

    // 更新地图位置（用于点击地图时）
    updateMapPosition(latitude, longitude) {
      this.setData({
        latitude,
        longitude,
        markers: [{
          id: 0,
          latitude,
          longitude,
          iconPath: app.getImgUrl('location.svg'),
          width: 40,
          height: 40
        }]
      })
      this.reverseGeocoder()
    },

    // 解析当前标记点地址
    reverseGeocoder() {
      qqmapsdk.reverseGeocoder({
        location: `${this.data.latitude},${this.data.longitude}`,
        success: res => {
          this.setData({
            address: res.result.address || res.result.formatted_addresses.recommend
          })
          this.triggerEvent('addresschange', {
            address: this.data.address,
            ...this.data.markers[0]
          })
        }
      })
    },
    onSearchConfirm(e) {
      console.log(e)
      // 两种方式获取搜索词：
      // 1. 通过事件参数（如 bindconfirm 触发）
      // 2. 直接使用 data 中的 searchText
      const keyword = e.detail.value || this.data.searchText;

      if (!keyword.trim()) {
        wx.showToast({
          title: '请输入搜索关键词',
          icon: 'none'
        });
        return;
      }

      // 添加当前位置参数提高搜索精度
      qqmapsdk.search({
        keyword: keyword,
        location: `${this.data.latitude},${this.data.longitude}`,
        page_size: 10,
        success: res => {
          console.log('腾讯地图搜索成功', res);

          if (res.data && res.data.length > 0) {
            // 输出前5条结果信息
            this.setData({
              searchResult: res.data,
              showResult: true
            })
            console.log(res.data)
            res.data.forEach((item, index) => {
              console.log(`结果 ${index + 1}:`, {
                name: item.title,
                address: item.address,
                distance: item._distance + '米',
                location: item.location
              });
            });

            // 自动定位到第一个结果（可选）
            const firstResult = res.data[0];
            this.updateMapPosition(
              firstResult.location.lat,
              firstResult.location.lng
            );
          } else {
            wx.showToast({
              title: '未找到相关地点',
              icon: 'none'
            });
          }
        },
        fail: err => {
          console.error('腾讯地图搜索失败', err);
          wx.showToast({
            title: '搜索失败，请重试',
            icon: 'none'
          });
        }
      });
    },
    toggleResult() {
      this.setData({
        showResult: this.data.showResult ? false : true
      })
    },
    // 提交结果
    comitResult() {
      this.triggerEvent('comitResult', {
        selectedAddress: this.data.address,       // 选中点的地址
        selectedLocation: this.data.markers[0],   // 选中点坐标
        userAddress: this.data.userLocation.address,      // 用户初始地址
        userLocation: {                           // 用户初始坐标
          latitude: this.data.userLocation.latitude,
          longitude: this.data.userLocation.longitude
        }
      })
      this.toggleMapMarker()
    },
    toggleMapMarker() {
      const drawer = this.selectComponent('#v-drawer')
      drawer.toggleDrawer()
    },
    onMapChange(e) { },
    onMapTap(e) {
      const { latitude, longitude } = e.detail
      this.updateMapPosition(latitude, longitude)

      // 添加延时确保视图更新（针对部分设备）
      setTimeout(() => {
        this.mapCtx.moveToLocation({ latitude, longitude })
      }, 50)
    },
    updateMapPosition(latitude, longitude) {
      this.setData({
        latitude,
        longitude,
        markers: [{
          id: 0,
          latitude,
          longitude,
          iconPath: app.getImgUrl('location.svg'),
          width: 40,
          height: 40
        }]
      }, () => {
        // 在回调中确保数据已更新
        this.reverseGeocoder()
      })
    },
    //处理搜索结果
    onResultItemTap(e) {
      const item = e.currentTarget.dataset.item;
      console.log(item)
      const location = item.location; // 假设item有location对象，包含lat和lng
      if (location && location.lat !== undefined && location.lng !== undefined) {
        const latitude = location.lat;
        const longitude = location.lng;
        this.updateMapPosition(latitude, longitude);
        this.setData({
          showResult: false, // 关闭搜索结果列表
          address:item.address
        });
        // 可选：移动地图视角
        this.mapCtx.moveToLocation({
          latitude,
          longitude
        });
      } else {
        console.error('Invalid location data for the selected item:', item);
        wx.showToast({
          title: '位置信息无效',
          icon: 'none'
        });
      }
    }
  }
})